Пульт.Онлайн /

Усреднение значений переменной

Чтобы усреднить значение переменной, воспользуйтесь формулой экспоненциального скользящего среднего (EMA) с фиксированным окном n.

Создадим пустой прототип, например, Прототип1.

Создадим переменную var1, которая будет случайным образом изменять свои значения 1 раз в секунду:

  1. Откройте прототип узла
  2. На вкладке VIRT создайте виртуальную переменную
  3. Задайте следующие свойства переменной:
    • Имя: var1
    • Тренд: вкл
    • Режим опроса: Период
    • Период: 1000
    • Данные: Хранимое значение
    • Модификатор: Случайные значения

Создадим переменную avg1, которая будет усреднять значения переменной var1:

  1. Откройте прототип узла
  2. На вкладке VIRT создайте виртуальную переменную
  3. Задайте следующие свойства переменной:
    • Имя: avg1
    • Тренд: вкл
    • Режим опроса: Период
    • Период: 1000
    • Данные: Выражение
    • Выражение: n=100, a=2/(n+1), (1-a)*$avg1+a*$var1
    • Недостоверно: Значение

Создадим узел Узел1 и в свойстве прототип укажем Прототип1.
Сохраним проект и выполним сборку.

Перейдем на Узел1 в интерфейсе, выберем переменные avg1 и var1 и откроем Тренды. Мы видим, что переменная var1 меняется случайным образом, а переменная avg1 усредняет значения var1.


Как это работает

Переменная avg1 на каждом шаге (по периоду) вычисляет новое значение как взвешенную сумму своего предыдущего значения и нового значения var1. Коэффициент a определяет степень сглаживания.

Размер окна усреднения регулируется переменной n. В нашем примере она равна 100, чо примерно соответствует арифметическому среднему для 100 значений var1. Меняя данное значение можно менять степень сглаживания (большее значение - плавнее, меньшее - резче).

Обратите внимание: обязательно указывайте период опроса, иначе при изменении переменной avg1 она сразу снова начнет пересчет, так как если период не указан, выражение пересчитывается при изменении значений входящих в него переменных.

Также необходимо указать Недостоверно: Значение - чтобы в случае недостоверного значения в var1 значение avg1 не перешло в ошибку и, в сою очередь, не стало причиной нового недостоверного значения.


Пример на демо-сервере

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   user_list
   user_save
   var_get
   var_list
   var_set